package com.itheima.interceptor;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.util.StringUtil;
import com.itheima.pojo.Result;
import com.itheima.utils.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component// 目标资源方法执行前执行, 返回true:放行, 返回false:不放行
public class LoginInteceptor implements HandlerInterceptor {

    @Autowired
    private ObjectMapper objectMapper; //   java对象和json相互转换的工具类


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      // 2.获取请求中的令牌信息 token
        String jwt = request.getHeader("token");
        // 3.判断令牌是否存在,果不存在,返回未登录的错误信息
        if (!StringUtils.hasText(jwt)){
            Result result = Result.error("NOT_LOGIN");
            // 参数1:响应输出流.参数2:要转换成json的对象
            // 含义:将参数2的Result对象转换json通过参数1的响应输出流发送给客户端
            objectMapper.writeValue(response.getWriter(),result);
            return false; // 阻止
        }

        try {
            JwtUtils.parseJWT(jwt);
        } catch (Exception e) {
            e.printStackTrace(); // 出现异常就表示校验失败,返回未登录的错误信息
            Result result = Result.error("NOT_LOGIN");
            // 参数1:响应输出流.参数2:要转换成json的对象
            // 含义:将参数2的Result对象转换成json通过参数1的响应输出流发送给客户端
            objectMapper.writeValue(response.getWriter(),result);
            return false; // 阻止
        }
            // 校验合法,放行,运行访问后端资源(部门管理 员工管理...)
        return true; //放行
    }


//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        System.out.println(" preHandle...");
//        return true;
//    }
//
//    @Override  // 目标资源方法执行后且没有异常时执行
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        System.out.println("postHandle...");
//    }
//
//    @Override // 目标资源方法执行后执行,无论是否出现异常都执行
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        System.out.println(" afterCompletion...");
//    }





}
